Ошибка расчета себестоимости по возвратам клиентам (при методе оценки стоимости товаров по «ФИФО (скользящая средняя)» и способ ее лечения

О чем эта статья

Статья описывает существенную ошибку, обнаруженную пользователями прикладного решения «Управление торговлей, ред.11» версии 11.1.2.9 – в расчете себестоимости при возврате товара от клиентов прошлых периодов. В статье также разрабатывается и внедряется программный код, позволяющий исправить эту ошибку.

Применимость

Статья написана для редакции УТ 11.1.2.9, в актуальных релизах типовой конфигурации данная ошибка устранена.

Ошибка расчета себестоимости при возврате товара

В существующей версии последнего релиза (на текущий момент это 11.1.2.9) присутствует одна существенная ошибка, которая может значительно попортить нервы как специалистам-учетчикам товаров, так и программистам, обслуживающим данную программу. А именно – ошибка с расчетом себестоимости при возврате товара от клиентов прошлых периодов.

Дело в том, что в программе корректно отрабатываются возвраты только в том случае, если отгрузка и возврат товара от клиента произошли в одном периоде (в одном месяце) и не работает, если отгрузка товара произошла, например, в июне месяце, а возврат происходит в июле.

Дабы не быть голословными, приведем простой пример на картинках.

Возьмем «чистую» базу последнего релиза (11.1.2.9), в настройках сразу укажем, что у нас одна организация и один склад. Заведем карточку номенклатуры «Стол» (товар). В учетной политике организации укажем, что метод оценки стоимости товаров у нас – «ФИФО (скользящая оценка)». (Сразу оговоримся, что для остальных методов (по средней за месяц, и средней по ФИФО) возвраты обоих видов рассчитываются корректно.)

Теперь создадим несколько документов, чтобы продемонстрировать суть проблемы.

Итак, в начале июня мы закупили на склад 10 шт. столов по цене 10000 руб/шт (наша себестоимость, для простоты – нет никаких доп.расходов):

Документ Поступление товаров и услуг
Рис. 1 (Нажмите, чтобы увеличить картинку)

Производим отгрузку 5 столов основному покупателю:

Отгрузка товаров
Рис. 2 (Нажмите, чтобы увеличить картинку)

Обратим внимание на дату отгрузки – это июнь месяц. Теперь попробуем вернуть 1 стол – сначала в этом же месяце, затем – в следующем, июле, и посмотрим, что получилось.

Итак, сначала возврат в том же месяце, что и месяц отгрузки.

Возврат товаров от клиента
Рис. 3 (Нажмите, чтобы увеличить картинку)

Заполнение по кнопке «Заполнить» – «Добавить товары из документов продажи» отработало на ура – нашелся документ отгрузки по данному клиенту и корректно заполнились количество и цена; мы меняем количество на 1 шт. После проведения сразу «заглянем» в движения, нас интересует регистр «Себестоимость товаров»:

Движения документа
Рис. 4 (Нажмите, чтобы увеличить картинку)

Движение типа «расход» со знаком минус – ну что ж, это стандартная ситуация с возвратами и тянется такой вариант записи еще с версий на 7.7 – так удобнее в отчетах «отлавливать» возвраты. Обратите внимание на Хозяйственную операцию – это «Сторно реализации».

Теперь «закроем месяц» июнь (Финансы – Закрытие месяца – выбираем июнь) и сформируем отчет «Себестоимость выбывших товаров» за июнь:

Себестоимость выбывших товаров
Рис. 5 (Нажмите, чтобы увеличить картинку)

Все верно, себестоимость по возврату посчиталась корректно (себестоимость возврата = стоимости закупки = 10000 руб/шт – см. Рис.1).

А теперь вернем товар в следующем месяце:

Возврат товаров от клиентов
Рис. 6 (Нажмите, чтобы увеличить картинку)

В основании тот же документ отгрузки, но месяц возврата теперь – июль. Что в движениях документа?

Ошибка в отчете по движению документа
Рис. 7 (Нажмите, чтобы увеличить картинку)

Довольно странно – почему то здесь уже вид движения не расход, как в прошлом случае, а приход – ну да ладно, мы же понимаем, что от «перестановки мест слагаемых сумма не меняется…», чисто формально все верно, но все равно на душе остался легкий налет непонимания. А вот хозяйственная операция теперь стала другой – «Возврат товаров от клиентов прошлых периодов». Ну что ж, формально опять все верно. Двигаемся тем же путем – закрываем месяц, только теперь не июнь, а июль. Снова формируем «Себестоимость выбывших товаров» (за июль) и видим следующее:

Себестоимость выбывших товаров
Рис. 8

Пусто! Даже количество возврата не отражено. Ах, ну да, у нас ведь вид движения поменялся, поэтому теперь нам надо смотреть движения по возврату не в этом отчете, а в «Себестоимости поступивших товаров» (для полной уверенности, что мы все верно понимаем, добавим группировку по регистратору):

Себестоимость поступивших товаров
Рис. 9 (Нажмите, чтобы увеличить картинку)

Количество есть, а стоимости нет, сколько бы мы не жали на кнопку закрытия месяца или не перепроводили документ «Расчет себестоимости товара». Конечно, мы можем в этом документе сменить вариант расчета себестоимости на один из вариантов по средней, но тогда для чего мы ставили «скользящую»? Наши пользователи ждут от нас именно такого расчета по всем номенклатурным позициям вне зависимости от того, случился у нас в этом месяце возврат или нет.

После 2-часовых консультаций с техподдержкой выяснилось, что проблема эта действительно существует (т.е. связана не с нашей «криворукостью») и ошибка эта зарегистрирована на сайте 1С и потому в перспективе, надеемся, будет решена. Вопрос когда? Новый метод по «скользящей» доступен уже с конца февраля (11.1.1.11), на дворе уже середина года и уверен, что многие уже успели перейти на него «задним числом.

Итак, задача – исправить себестоимость возвратов, не дожидаясь его официального решения. Описывать свои часы раздумий, поисков, анализов текстов запросов не буду. Сразу приведу решение.

Посыл следующий – себестоимость возврата – это стоимость закупки. Но! В нашем возврате уже есть движения по сторнированию стоимости закупа – это регистр «Партии товаров организаций» и они посчитаны верно:

Партии товаров организаций
Рис. 10 (Нажмите, чтобы увеличить картинку)

Т.е. нам остается всего ничего – просто перенести эти цифры (с НДС, без НДС…) в записи регистра себестоимости товаров. Лучше всего это сделать в обработке закрытия месяца, а не при проведении документа «Возврат от клиента», поскольку регистры партий также рассчитываются при закрытии месяца.

Итак, в конфигураторе открываем форму обработки «Операции закрытия месяца» (она одна – «Форма УТ»), ищем процедуру «ДействиеФормированиеДвиженийПоПартиямТоваровСервер» и после строки:

ПартионныйУчетСервер.ВыполнитьРегламентноеФормированиеДвиженийПоПартиямТоваров();

(т.е. после формирования движения по партиям) вставляем свою строку:

т_Модуль.СкорректироватьСтоимостьВозвратовПрошлыхПериодов(Объект.ПериодРегистрации);

Здесь «т_Модуль» – это мой общий модуль с галочкой «Сервер» и в ней следующая экспортная процедура:

Процедура Скорректировать Стоимость Возвратов Прошлых Периодов

Обработка Закрытие месяца

Прописать процедуру

Из текста видно, что «подправляются» также движения по регистру «Выручка и себестоимость продаж», которые «завязаны» на те же данные по партиям.
Обновим конфигурацию, снова «закроем» июль и посмотрим наш отчет:

Себестоимость поступивших товаров
Рис. 11 (Нажмите, чтобы увеличить картинку)

Ура! Себестоимость возвращена.

Отмечу, что себестоимость отражается в самом возврате, а не в регламентном документе и лично для себя никаких противопоказаний этому я не нашел – мне так удобнее и к тому же так нагляднее.

Вкратце опишу процедуру «поиска и подстановки» себестоимости. Во-первых, выбираем все проведенные возвраты от клиентов за указанный период. Далее, начинаем их перебирать, и для каждого документа «загоняем» движения по партиям во временную таблицу. Начинаем перебирать записи движений по себестоимости товаров и там где хоз.операция равна «Возврат товаров от клиентов прошлых периодов» (напомню, что для хоз.операции «Сторно реализации» считается и так правильно) ищем в таблице партий соответствующую строку (отбор по номенклатуре и по количеству), найдя которую подставляем суммовые параметры в регистр себестоимости. Аналогично делаем для регистра «Выручка и себестоимость продаж».

Резюме:

Обнаружена ошибка при расчете себестоимости возврата товара клиенту прошлых периодов. В данной статье предложено решение этой проблемы, которое можно рекомендовать в качестве временной меры (поскольку рано или поздно эта ошибка будет исправлена самой 1С).

Комментарии / обсуждение (11):

  1. Наталья

    Блин, статья 2013 года, а я в 2020 году с этим борюсь! Статья сильно помогла понять, что не я “криворукая”. С корректировками реализации согласна, что тоже все плохо, если в 0 корректируешь.

    • Power_ON

      В УНФ такая же проблема, похоже. Но не с возвратами прошлых периодов, а с возвратами в рознице не в день покупки.

  2. Алексей

    В 11.2 вернулись к ошибке. Себестоимость возврата не считается, если возврат не в том же месяце что и реализация.

  3. Геннадий

    В 1С Управление торговлей 11.1.9.70 (20 января 2015) уже исправили (хотя, в 11.1.9.66, 2 недели назад, вроде, ещё оставалась эта проблема, не хочется перепроверять)

    • Андрей Харечко

      Здравствуйте!
      На последнем на текущий момент релизе конфигурации ошибка не воспроизводится.
      Отчеты показывают верную информацию.

  4. NinaL

    Спасибо за статью. Очень много вопросов по расчету себестоимости в УТ 11=( Еще заметила “пропажу себестоимости” при применении схемы интеркампани.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.